/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sacodemel.financeiro.mb;

import com.sacodemel.financeiro.servico.IFluxoDeCaixaService;
import com.sacodemel.financeiro.servico.impl.FluxoDeCaixaService;
import com.sacodemel.financeiro.modelo.RegistroCaixa;
import com.sacodemel.financeiro.modelo.dto.TotalDTO;
import com.sacodemel.financeiro.util.Constantes;
import com.sacodemel.financeiro.util.JSFUtil;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author X4Q1
 */
@ManagedBean
@ViewScoped
public class FluxoDeCaixaMB implements Serializable {

    private List<RegistroCaixa> listaRegistrosCaixa = null;
    private IFluxoDeCaixaService fluxoDeCaixaService = new FluxoDeCaixaService();
    private TotalDTO total;
    
    //Filtro
    private String filtroTipoRegistro = null;
    private String filtroPalavraChave = null;
    private Date filtroDataInicio = null;
    private Date filtroDataFim = null;
    private String filtroTipoReceita = null;
    private String filtroInvestidor = null;
    

    /**
     * @return the listaFluxoDeCaixa
     */
    public List<RegistroCaixa> getListaRegistrosCaixa() {

        if (listaRegistrosCaixa == null) {
            this.carregaListagem();
        }

        return listaRegistrosCaixa;
    }

    public String pesquisar() {
        
        if (getDespesa().equals(filtroTipoRegistro)){
            setFiltroTipoReceita(null);
            setFiltroInvestidor(null);
        }
        
        if (getInvestimento().equals(filtroTipoReceita)){
            setFiltroInvestidor(null);
        }
        
        this.carregaListagem();
        
        if (listaRegistrosCaixa==null && listaRegistrosCaixa.size()==0){
            JSFUtil.adicionaMensagemFalha("Não foram encontrados dados.");
        }

        return null;
    }

    public String getReceita() {
        return Constantes.REGISTRO_RECEITA;
    }

    public String getDespesa() {
        return Constantes.REGISTRO_DESPESA;
    }
    
     public String getLucro(){
        return Constantes.ORIGEM_LUCRO;
    }
    
    public String getInvestimento(){
        return Constantes.ORIGEM_INVESTIMENTO;
    }
    

    /**
     * @param listaFluxoDeCaixa the listaFluxoDeCaixa to set
     */
    public void setListaRegistrosCaixa(List<RegistroCaixa> listaRegistrosCaixa) {
        this.listaRegistrosCaixa = listaRegistrosCaixa;
    }

    /**
     * @return the ivestidoresService
     */
    public IFluxoDeCaixaService getFluxoDeCaixaService() {
        return fluxoDeCaixaService;
    }

    /**
     * @param ivestidoresService the ivestidoresService to set
     */
    public void setFluxoDeCaixaService(IFluxoDeCaixaService FluxoDeCaixaService) {
        this.fluxoDeCaixaService = FluxoDeCaixaService;
    }

    /**
     * @return the filtroTipoRegistro
     */
    public String getFiltroTipoRegistro() {
        return filtroTipoRegistro;
    }

    /**
     * @param filtroTipoRegistro the filtroTipoRegistro to set
     */
    public void setFiltroTipoRegistro(String filtroTipoRegistro) {
        this.filtroTipoRegistro = filtroTipoRegistro;
    }

    /**
     * @return the filtroPalavraChave
     */
    public String getFiltroPalavraChave() {
        return filtroPalavraChave;
    }

    /**
     * @param filtroPalavraChave the filtroPalavraChave to set
     */
    public void setFiltroPalavraChave(String filtroPalavraChave) {
        this.filtroPalavraChave = filtroPalavraChave;
    }

    /**
     * @return the filtroDataInicio
     */
    public Date getFiltroDataInicio() {
        return filtroDataInicio;
    }

    /**
     * @param filtroDataInicio the filtroDataInicio to set
     */
    public void setFiltroDataInicio(Date filtroDataInicio) {
        this.filtroDataInicio = filtroDataInicio;
    }

    /**
     * @return the filtroDataFim
     */
    public Date getFiltroDataFim() {
        return filtroDataFim;
    }

    /**
     * @param filtroDataFim the filtroDataFim to set
     */
    public void setFiltroDataFim(Date filtroDataFim) {
        this.filtroDataFim = filtroDataFim;
    }

    /**
     * @return the filtroTipoReceita
     */
    public String getFiltroTipoReceita() {
        return filtroTipoReceita;
    }

    /**
     * @param filtroTipoReceita the filtroTipoReceita to set
     */
    public void setFiltroTipoReceita(String filtroTipoReceita) {
        this.filtroTipoReceita = filtroTipoReceita;
    }

    /**
     * @return the filtroInvestidor
     */
    public String getFiltroInvestidor() {
        return filtroInvestidor;
    }

    /**
     * @param filtroInvestidor the filtroInvestidor to set
     */
    public void setFiltroInvestidor(String filtroInvestidor) {
        this.filtroInvestidor = filtroInvestidor;
    }

    /**
     * @return the total
     */
    public TotalDTO getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(TotalDTO total) {
        this.total = total;
    }

    private void carregaListagem() {
        try {
            listaRegistrosCaixa = fluxoDeCaixaService.obterFluxoDeCaixa(filtroTipoRegistro, filtroPalavraChave, filtroDataInicio, filtroDataFim, filtroTipoReceita, filtroInvestidor);

            total = fluxoDeCaixaService.retornarTotalizadores(listaRegistrosCaixa);
        } catch (Exception e) {
            JSFUtil.adicionaMensagem(e.getMessage());
        }


    }
}
